#if !defined(FAKE_D3D10_RESOURCE_H)
#define FAKE_D3D10_RESOURCE_H

#include <d3d10.h>
#include "Fakes/FakeD3D10DeviceChild.h"
#include <rt/Exceptions/NotImplementedException.h>

class FakeD3D10Resource : public ID3D10Resource
{
public:
	FakeD3D10Resource()
		: DeviceChild()
	{ }

	CONTAIN_DEVICE_CHILD(DeviceChild);
	virtual void STDMETHODCALLTYPE GetType(D3D10_RESOURCE_DIMENSION *pResourceDimension) { throw rt::NotImplementedException(); }
	virtual void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) { throw rt::NotImplementedException(); }
	virtual UINT STDMETHODCALLTYPE GetEvictionPriority() { throw rt::NotImplementedException(); }
};

#define CONTAIN_RESOURCE(member_) \
	CONTAIN_DEVICE_CHILD(DeviceChild) \
	FakeD3D10Resource member_; \
	virtual void STDMETHODCALLTYPE GetType(D3D10_RESOURCE_DIMENSION *pResourceDimension) { return member_.GetType(pResourceDimension); } \
	virtual void STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority) { return member_.SetEvictionPriority(EvictionPriority); } \
	virtual UINT STDMETHODCALLTYPE GetEvictionPriority() { return member_.GetEvictionPriority(); }

#endif
